/*****************************************************************************************
 * ETS
 * 
 * Cours:		LOG121
 * Session:		A2013
 * Groupe:		04
 * Projet:		Laboratoire #4
 * Etudiants:	Frederic-Simon Mimeault
 * 				Francisco Felipe Quilodran
 * 				Guillaume Longtin
 * 				William Proulx
 * 
 * Professeur:	Francis Cardinal
 * 
 * Fichier:		Menu.java
 * 
 * Date de creation:	2013-11-26
 * Date dern. modif.:	2013-12-06
 * ****************************************************************************************
 * Historique des modifications
 * ****************************************************************************************
 * 2013-26-06 Version initiale
 *****************************************************************************************/

package application;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

import javax.swing.JFileChooser;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;




import javax.swing.JOptionPane;
import javax.swing.JTextField;

import controleur.FigureControleur;
import controleur.GestionnaireCommande;
import controleur.PerspectiveControleur;
import vue.FigureVue;

/**
 * Cette classe est celle qui défini la barre de menu de l'application.
 * @author Guillaume Longtin
 */
public class Menu extends JMenuBar {
	
	private static final String
	MENU_FICHIER_TITRE = "Fichier",
	MENU_FICHIER_QUITTER = "Quitter",
	MENU_FICHIER_UNDO = "Undo",
	MENU_FICHIER_SAUVEGARDER = "Sauvegarder",
	MENU_FICHIER_OUVRIR = "Ouvrir Image",
	MENU_FICHIER_CHARGER = "Charger",
	MENU_EDITION_TITRE = "�dition",
	MENU_EDITION_ZOOMOUT = "Zoom out",
	MENU_EDITION_ABOUT = "About";
	private static final String MenuFichier[] = { MENU_FICHIER_OUVRIR, MENU_FICHIER_CHARGER, MENU_FICHIER_SAUVEGARDER, MENU_FICHIER_UNDO, MENU_FICHIER_QUITTER };
	private static final String MenuEdition[] = { MENU_EDITION_ZOOMOUT, MENU_EDITION_ABOUT };
	private FigureControleur fControleur;
	private Serialize serialisation;
	private PerspectiveControleur pControleur;
	
	/**
	 * Contructeur de la classe Menu permettant de construire une barre de menu.
	 * @param fControleur
	 * @param pControleur
	 * @param serialisation
	 */
	public Menu (FigureControleur fControleur, PerspectiveControleur pControleur, Serialize serialisation) {
		
		this.fControleur = fControleur;
		this.serialisation = serialisation;
		this.pControleur = pControleur;
		this.addMenuFichier();
		this.addMenuEdition();
		
	}
	
	/**
	 * Méthode qui permet d'ajouter l'onglet Fichier à la barre de menu.
	 */
	public void addMenuFichier() {
		
		JMenu menu = creerMenu(MENU_FICHIER_TITRE, MenuFichier);
		
		menu.getItem(0).addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
			  
				if(JOptionPane.showInternalConfirmDialog(Menu.this, "Êtes vous sur de vouloir changer d'image? Vous allez perdre l'information") == JOptionPane.YES_OPTION) {
					  
					JFileChooser fileChooser = new JFileChooser();
				  
					if(fileChooser.showOpenDialog(Menu.this) == 0) {
					  
						String path = fileChooser.getSelectedFile().getAbsolutePath();
						FenetrePrincipaleVue.initialisation(FenetrePrincipaleVue.NOMBRE_PERSPECTIVES, path);
					  
			    	}	
				}
			}
		});
		
		menu.getItem(1).addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				
				if(JOptionPane.showInternalConfirmDialog(Menu.this, "Êtes vous sur de vouloir changer d'image? Vous allez perdre l'information") == JOptionPane.YES_OPTION) {
				  
					JFileChooser fileChooser = new JFileChooser();
				  
				    if(fileChooser.showOpenDialog(Menu.this) == 0) {
					  
						String name, directory;
						name = (fileChooser.getSelectedFile().getName());
					    directory = (fileChooser.getCurrentDirectory().getAbsolutePath().toString());
						  
					    try {
					    	  
					    	serialisation.deSerialize(name, directory);
							
					    } catch (ClassNotFoundException e) {
						
					    	e.printStackTrace();
							
					    }
				    }
				}
			}
		});
		
		menu.getItem(2).addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				
				JFileChooser fileChooser = new JFileChooser();
				String name = new String(), directory = new String();
			    int rVal = fileChooser.showSaveDialog(Menu.this);
			    
			    if (rVal == JFileChooser.APPROVE_OPTION) {
			    	
			    	name = (fileChooser.getSelectedFile().getName());
			        directory = (fileChooser.getCurrentDirectory().getAbsolutePath().toString());
			        serialisation.serialize(name, directory);
			        
			    }
			}
		});
		
		menu.getItem(3).addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				
				GestionnaireCommande.getInstance().defaireCommande();	
				
			}
			
		});
		
		menu.getItem(4).addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				
				System.exit(0);
				
			}
			
		});
		
		add(menu);
		
	}
	
	/**
	 * Méthode qui permet d'ajouter l'onglet Édition à la barre de menu.
	 */
	public void addMenuEdition() {
		
		JMenu menu = creerMenu(MENU_EDITION_TITRE,MenuEdition);
		
		menu.getItem(1).addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				
				JOptionPane.showMessageDialog(Menu.this, "Ce programme a été conçu et developpé par Guillaume Longtin, Frédéric-Simon Mimeault, Francisco Quilodran et William Proulx","About", 1);
				
			}
			
		});
		
		add(menu);
	}
	
	/**
	 * Méthode statiquequi créé la barre de menu en tenant compte du nom de chacuns des onglets et sous-onglets.
	 * @param titleKey
	 * @param itemKeys
	 * @return
	 */
	private static JMenu creerMenu(String titleKey,String[] itemKeys) {
		
        JMenu menu = new JMenu(titleKey);
        
        for(int i = 0; i < itemKeys.length; i++) {
        	
           menu.add(new JMenuItem(itemKeys[i]));
           
        }
        
        return menu;
        
   }
	
}
